diff --git a/tests/codeigniter/helpers/array_helper_test.php b/tests/codeigniter/helpers/array_helper_test.php
index 9cd1596..ba46e86 100644
--- a/tests/codeigniter/helpers/array_helper_test.php
+++ b/tests/codeigniter/helpers/array_helper_test.php
@@ -1,7 +1,7 @@
 <?php
 
 class Array_helper_test extends CI_TestCase {
-	
+
 	public function set_up()
 	{
 		$this->helper('array');
@@ -13,31 +13,31 @@
 			'herb'		=> 'cook'
 		);
 	}
-	
+
 	// ------------------------------------------------------------------------
-	
+
 	public function test_element_with_existing_item()
-	{	
+	{
 		$this->assertEquals(FALSE, element('testing', $this->my_array));
-		
+
 		$this->assertEquals('not set', element('testing', $this->my_array, 'not set'));
-		
+
 		$this->assertEquals('bar', element('foo', $this->my_array));
 	}
-	
-	// ------------------------------------------------------------------------	
+
+	// ------------------------------------------------------------------------
 
 	public function test_random_element()
 	{
 		// Send a string, not an array to random_element
 		$this->assertEquals('my string', random_element('my string'));
-		
+
 		// Test sending an array
 		$this->assertEquals(TRUE, in_array(random_element($this->my_array), $this->my_array));
 	}
 
-	// ------------------------------------------------------------------------	
-	
+	// ------------------------------------------------------------------------
+
 	public function test_elements()
 	{
 		$this->assertEquals(TRUE, is_array(elements('test', $this->my_array)));
diff --git a/tests/codeigniter/helpers/date_helper_test.php b/tests/codeigniter/helpers/date_helper_test.php
index df03fe3..4b747b8 100644
--- a/tests/codeigniter/helpers/date_helper_test.php
+++ b/tests/codeigniter/helpers/date_helper_test.php
@@ -5,6 +5,8 @@
 	public function set_up()
 	{
 		$this->helper('date');
+
+		$this->time = time();
 	}
 
 	// ------------------------------------------------------------------------
@@ -37,119 +39,120 @@
 		$this->ci_instance_var('config', $config);
 
 		$t = time();
-		$expected = mktime(gmdate("H", $t), gmdate("i", $t), gmdate("s", $t), gmdate("m", $t), gmdate("d", $t), gmdate("Y", $t));
-		$test = now();
-		$this->assertEquals($expected, $test);
+		$this->assertEquals(
+			mktime(gmdate('H', $t), gmdate('i', $t), gmdate('s', $t), gmdate('m', $t), gmdate('d', $t), gmdate('Y', $t)),
+			now()
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_mdate()
 	{
-		$time = time();
-		$expected = date("Y-m-d - h:i a", $time);
-		$test = mdate("%Y-%m-%d - %h:%i %a", $time);
-		$this->assertEquals($expected, $test);
+		$this->assertEquals(
+			date('Y-m-d - h:i a', $this->time),
+			mdate('%Y-%m-%d - %h:%i %a', $this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_standard_date_rfc822()
 	{
-		$time = time();
-		$format = 'DATE_RFC822';
-		$expected = date("D, d M y H:i:s O", $time);
-		$this->assertEquals($expected, standard_date($format, $time));
+		$this->assertEquals(
+			date('D, d M y H:i:s O', $this->time),
+			standard_date('DATE_RFC822', $this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_standard_date_atom()
 	{
-		$time = time();
-		$format = 'DATE_ATOM';
-		$expected = date("Y-m-d\TH:i:sO", $time);
-		$this->assertEquals($expected, standard_date($format, $time));
+		$this->assertEquals(
+			date("Y-m-d\TH:i:sO", $this->time),
+			standard_date('DATE_ATOM', $this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_standard_date_cookie()
 	{
-		$time = time();
-		$format = 'DATE_COOKIE';
-		$expected = date("l, d-M-y H:i:s \U\T\C", $time);
-		$this->assertEquals($expected, standard_date($format, $time));
+		$this->assertEquals(
+			date("l, d-M-y H:i:s \U\T\C", $this->time),
+			standard_date('DATE_COOKIE', $this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_standard_date_iso8601()
 	{
-		$time = time();
-		$format = 'DATE_ISO8601';
-		$expected = date("Y-m-d\TH:i:sO", $time);
-		$this->assertEquals($expected, standard_date($format, $time));
+		$this->assertEquals(
+			date("Y-m-d\TH:i:sO", $this->time),
+			standard_date('DATE_ISO8601', $this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_standard_date_rfc850()
 	{
-		$time = time();
-		$format = 'DATE_RFC850';
-		$expected = date("l, d-M-y H:i:s \U\T\C", $time);
-		$this->assertEquals($expected, standard_date($format, $time));
+		$this->assertEquals(
+			date("l, d-M-y H:i:s \U\T\C", $this->time),
+			standard_date('DATE_RFC850', $this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_standard_date_rfc1036()
 	{
-		$time = time();
-		$format = 'DATE_RFC1036';
-		$expected = date("D, d M y H:i:s O", $time);
-		$this->assertEquals($expected, standard_date($format, $time));
+		$this->assertEquals(
+			date('D, d M y H:i:s O', $this->time),
+			standard_date('DATE_RFC1036', $this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_standard_date_rfc1123()
 	{
-		$time = time();
-		$format = 'DATE_RFC1123';
-		$expected = date("D, d M Y H:i:s O", $time);
-		$this->assertEquals($expected, standard_date($format, $time));
+		$this->assertEquals(
+			date('D, d M Y H:i:s O', $this->time),
+			standard_date('DATE_RFC1123', $this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_standard_date_rfc2822()
 	{
-		$time = time();
-		$format = 'DATE_RFC2822';
-		$expected = date("D, d M Y H:i:s O", $time);
-		$this->assertEquals($expected, standard_date($format, $time));
+		$this->assertEquals(
+			date('D, d M Y H:i:s O', $this->time),
+			standard_date('DATE_RFC2822', $this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_standard_date_rss()
 	{
-		$time = time();
-		$format = 'DATE_RSS';
-		$expected = date("D, d M Y H:i:s O", $time);
-		$this->assertEquals($expected, standard_date($format, $time));
+		$this->assertEquals(
+			date('D, d M Y H:i:s O', $this->time),
+			standard_date('DATE_RSS', $this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_standard_date_w3c()
 	{
-		$time = time();
-		$format = 'DATE_W3C';
-		$expected = date("Y-m-d\TH:i:sO", $time);
-		$this->assertEquals($expected, standard_date($format, $time));
+		$this->assertEquals(
+			date("Y-m-d\TH:i:sO", $this->time),
+			standard_date('DATE_W3C', $this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
@@ -181,38 +184,36 @@
 
 	public function test_local_to_gmt()
 	{
-		$t = time();
-		$expected = mktime(gmdate("H", $t), gmdate("i", $t), gmdate("s", $t), gmdate("m", $t), gmdate("d", $t), gmdate("Y", $t));
-		$this->assertEquals($expected, local_to_gmt($t));
+		$this->assertEquals(
+			mktime(
+				gmdate('H', $this->time), gmdate('i', $this->time), gmdate('s', $this->time),
+				gmdate('m', $this->time), gmdate('d', $this->time), gmdate('Y', $this->time)
+			),
+			local_to_gmt($this->time)
+		);
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_gmt_to_local()
 	{
-		$timestamp = '1140153693';
-		$timezone = 'UM8';
-		$daylight_saving = TRUE;
-
-		$this->assertEquals(1140128493, gmt_to_local($timestamp, $timezone, $daylight_saving));
+		$this->assertEquals(1140128493, gmt_to_local('1140153693', 'UM8', TRUE));
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_mysql_to_unix()
 	{
-		$time = time();
-		$this->assertEquals($time, mysql_to_unix(date("Y-m-d H:i:s", $time)));
+		$this->assertEquals($this->time, mysql_to_unix(date('Y-m-d H:i:s', $this->time)));
 	}
 
 	// ------------------------------------------------------------------------
 
 	public function test_unix_to_human()
 	{
-		$time = time();
-		$this->assertEquals(date("Y-m-d h:i A", $time), unix_to_human($time));
-		$this->assertEquals(date("Y-m-d h:i:s A", $time), unix_to_human($time, TRUE, 'us'));
-		$this->assertEquals(date("Y-m-d H:i:s", $time), unix_to_human($time, TRUE, 'eu'));
+		$this->assertEquals(date('Y-m-d h:i A', $this->time), unix_to_human($this->time));
+		$this->assertEquals(date('Y-m-d h:i:s A', $this->time), unix_to_human($this->time, TRUE, 'us'));
+		$this->assertEquals(date('Y-m-d H:i:s', $this->time), unix_to_human($this->time, TRUE, 'eu'));
 	}
 
 	// ------------------------------------------------------------------------
@@ -220,8 +221,7 @@
 	public function test_human_to_unix()
 	{
 		$date = '2000-12-31 10:00:00 PM';
-		$expected = strtotime($date);
-		$this->assertEquals($expected, human_to_unix($date));
+		$this->assertEquals(strtotime($date), human_to_unix($date));
 		$this->assertFalse(human_to_unix());
 	}
 
@@ -280,6 +280,7 @@
 		$this->assertArrayHasKey('UP3', timezones());
 		$this->assertEquals(0, timezones('non_existant'));
 	}
+
 }
 
 /* End of file date_helper_test.php */
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/directory_helper_test.php b/tests/codeigniter/helpers/directory_helper_test.php
index 3937d29..176ff1d 100644
--- a/tests/codeigniter/helpers/directory_helper_test.php
+++ b/tests/codeigniter/helpers/directory_helper_test.php
@@ -1,41 +1,50 @@
 <?php
 
 class Directory_helper_test extends CI_TestCase {
-	
+
 	public function set_up()
 	{
 		$this->helper('directory');
 
 		vfsStreamWrapper::register();
 		vfsStreamWrapper::setRoot(new vfsStreamDirectory('testDir'));
-		
+
 		$this->_test_dir = vfsStreamWrapper::getRoot();
-	}	
-	
+	}
+
 	public function test_directory_map()
 	{
-		$structure = array('libraries' => array('benchmark.html' => '', 'database' =>
-			array('active_record.html' => '', 'binds.html' => ''), 'email.html' => '', '.hiddenfile.txt' => ''));
-		
+		$structure = array(
+			'libraries' => array(
+				'benchmark.html' => '',
+				'database' => array('active_record.html' => '', 'binds.html' => ''),
+				'email.html' => '',
+				'.hiddenfile.txt' => ''
+			)
+		);
+
 		vfsStream::create($structure, $this->_test_dir);
 
 		// test default recursive behavior
-		$expected = array('libraries' => array('benchmark.html', 'database' =>
-			array('active_record.html', 'binds.html'), 'email.html'));
-			
+		$expected = array(
+			'libraries' => array(
+				'benchmark.html',
+				'database' => array('active_record.html', 'binds.html'),
+				'email.html'
+			)
+		);
+
 		$this->assertEquals($expected, directory_map(vfsStream::url('testDir')));
 
-		// test recursion depth behavior
-		$expected = array('libraries');
-			
-		$this->assertEquals($expected, directory_map(vfsStream::url('testDir'), 1));
-
 		// test detection of hidden files
-		$expected = array('libraries' => array('benchmark.html', 'database' =>
-			array('active_record.html', 'binds.html'), 'email.html', '.hiddenfile.txt'));
-			
+		$expected['libraries'][] = '.hiddenfile.txt';
+
 		$this->assertEquals($expected, directory_map(vfsStream::url('testDir'), FALSE, TRUE));
-  }  
+
+		// test recursion depth behavior
+		$this->assertEquals(array('libraries'), directory_map(vfsStream::url('testDir'), 1));
+	}
+
 }
 
 /* End of file directory_helper_test.php */
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/email_helper_test.php b/tests/codeigniter/helpers/email_helper_test.php
index a01f3d5..fea452f 100644
--- a/tests/codeigniter/helpers/email_helper_test.php
+++ b/tests/codeigniter/helpers/email_helper_test.php
@@ -14,5 +14,5 @@
 		$this->assertEquals(TRUE, valid_email('test@test.com'));
 		$this->assertEquals(TRUE, valid_email('my.test@test.com'));
 	}
-	
+
 }
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/file_helper_test.php b/tests/codeigniter/helpers/file_helper_test.php
index 4b9c294..9b03da9 100644
--- a/tests/codeigniter/helpers/file_helper_test.php
+++ b/tests/codeigniter/helpers/file_helper_test.php
@@ -5,24 +5,23 @@
 	public function set_up()
 	{
 		$this->helper('file');
-		
+
 		vfsStreamWrapper::register();
 		vfsStreamWrapper::setRoot(new vfsStreamDirectory('testDir'));
-		
+
 		$this->_test_dir = vfsStreamWrapper::getRoot();
 	}
-	
+
 	// --------------------------------------------------------------------
-	
+
 	public function test_read_file()
 	{
 		$this->assertFalse(read_file('does_not_exist'));
-		
+
 		$content = 'Jack and Jill went up the mountain to fight a billy goat.';
-		
-		$file = vfsStream::newFile('my_file.txt')->withContent($content)
-												 ->at($this->_test_dir);
-		
+
+		$file = vfsStream::newFile('my_file.txt')->withContent($content)->at($this->_test_dir);
+
 		$this->assertEquals($content, read_file(vfsStream::url('my_file.txt')));
 	}
 
@@ -31,126 +30,124 @@
 	public function test_octal_permissions()
 	{
 		$content = 'Jack and Jill went up the mountain to fight a billy goat.';
-		
+
 		$file = vfsStream::newFile('my_file.txt', 0777)->withContent($content)
-												 ->lastModified(time() - 86400)
-												 ->at($this->_test_dir);
-		
-		$this->assertEquals('777', octal_permissions($file->getPermissions()));		
+											 ->lastModified(time() - 86400)
+											 ->at($this->_test_dir);
+
+		$this->assertEquals('777', octal_permissions($file->getPermissions()));
 	}
 
-	// --------------------------------------------------------------------	
-	
+	// --------------------------------------------------------------------
+
 	/**
 	 * More tests should happen here, since I'm not hitting the whole function.
 	 */
 	public function test_symbolic_permissions()
 	{
 		$content = 'Jack and Jill went up the mountain to fight a billy goat.';
-		
+
 		$file = vfsStream::newFile('my_file.txt', 0777)->withContent($content)
-												 ->lastModified(time() - 86400)
-												 ->at($this->_test_dir);
-												
-		$this->assertEquals('urwxrwxrwx', symbolic_permissions($file->getPermissions()));		
+											 ->lastModified(time() - 86400)
+											 ->at($this->_test_dir);
+
+		$this->assertEquals('urwxrwxrwx', symbolic_permissions($file->getPermissions()));
 	}
 
-	// --------------------------------------------------------------------	
-	
+	// --------------------------------------------------------------------
+
 	public function test_get_mime_by_extension()
 	{
 		$content = 'Jack and Jill went up the mountain to fight a billy goat.';
-		
+
 		$file = vfsStream::newFile('my_file.txt', 0777)->withContent($content)
-												 ->lastModified(time() - 86400)
-												 ->at($this->_test_dir);
-												
-		$this->assertEquals('text/plain', 
-						get_mime_by_extension(vfsStream::url('my_file.txt')));
-						
-		// Test a mime with an array, such as png		
+											 ->lastModified(time() - 86400)
+											 ->at($this->_test_dir);
+
+		$this->assertEquals('text/plain', get_mime_by_extension(vfsStream::url('my_file.txt')));
+
+		// Test a mime with an array, such as png
 		$file = vfsStream::newFile('foo.png')->at($this->_test_dir);
-		
-		$this->assertEquals('image/png', get_mime_by_extension(vfsStream::url('foo.png')));			
-			
+
+		$this->assertEquals('image/png', get_mime_by_extension(vfsStream::url('foo.png')));
+
 		// Test a file not in the mimes array
 		$file = vfsStream::newFile('foo.blarfengar')->at($this->_test_dir);
-		
+
 		$this->assertFalse(get_mime_by_extension(vfsStream::url('foo.blarfengar')));
 	}
 
-	// --------------------------------------------------------------------	
+	// --------------------------------------------------------------------
 
 	public function test_get_file_info()
 	{
 		// Test Bad File
 		$this->assertFalse(get_file_info('i_am_bad_boo'));
-		
+
 		// Test the rest
-		
+
 		// First pass in an array
 		$vals = array(
 			'name', 'server_path', 'size', 'date',
-			'readable', 'writable', 'executable',  'fileperms'
+			'readable', 'writable', 'executable', 'fileperms'
 		);
-		
+
 		$this->_test_get_file_info($vals);
 
 		// Test passing in vals as a string.
-		$vals = 'name, server_path, size, date, readable, writable, executable, fileperms';
-		$this->_test_get_file_info($vals);
+		$this->_test_get_file_info(implode(', ', $vals));
 	}
-	
+
 	private function _test_get_file_info($vals)
 	{
 		$content = 'Jack and Jill went up the mountain to fight a billy goat.';
 		$last_modified = time() - 86400;
-		
+
 		$file = vfsStream::newFile('my_file.txt', 0777)->withContent($content)
-												 ->lastModified($last_modified)
-												 ->at($this->_test_dir);
-		
+											 ->lastModified($last_modified)
+											 ->at($this->_test_dir);
+
 		$ret_values = array(
-			'name'			=> 'my_file.txt', 
-			'server_path'	=> 'vfs://my_file.txt', 
-			'size'			=> 57, 
-			'date'			=> $last_modified, 
+			'name'			=> 'my_file.txt',
+			'server_path'	=> 'vfs://my_file.txt',
+			'size'			=> 57,
+			'date'			=> $last_modified,
 			'readable'		=> TRUE,
-			'writable'		=> TRUE, 
-			'executable'	=> TRUE, 
+			'writable'		=> TRUE,
+			'executable'	=> TRUE,
 			'fileperms'		=> 33279
 		);
-		
+
 		$info = get_file_info(vfsStream::url('my_file.txt'), $vals);
-		
+
 		foreach ($info as $k => $v)
 		{
 			$this->assertEquals($ret_values[$k], $v);
 		}
 	}
-	
-	// --------------------------------------------------------------------	
+
+	// --------------------------------------------------------------------
 
 	// Skipping for now, as it's not implemented in vfsStreamWrapper
 	// flock(): vfsStreamWrapper::stream_lock is not implemented!
-	
+
 	// public function test_write_file()
 	// {
-	// 	if ( ! defined('FOPEN_WRITE_CREATE_DESTRUCTIVE'))
-	// 	{
-	// 		define('FOPEN_WRITE_CREATE_DESTRUCTIVE', 'wb');
-	// 	}
-	// 	
-	// 	$content = 'Jack and Jill went up the mountain to fight a billy goat.';
-	// 	
-	// 	$file = vfsStream::newFile('write.txt', 0777)->withContent('')
-	// 											 	 ->lastModified(time() - 86400)
-	// 											 	 ->at($this->_test_dir);
-	// 	
-	// 	$this->assertTrue(write_file(vfsStream::url('write.txt'), $content));
-	// 		
+	//	if ( ! defined('FOPEN_WRITE_CREATE_DESTRUCTIVE'))
+	//	{
+	//		define('FOPEN_WRITE_CREATE_DESTRUCTIVE', 'wb');
+	//	}
+	//
+	//	$content = 'Jack and Jill went up the mountain to fight a billy goat.';
+	//
+	//	$file = vfsStream::newFile('write.txt', 0777)->withContent('')
+	//								 	 ->lastModified(time() - 86400)
+	//								 	 ->at($this->_test_dir);
+	//
+	//	$this->assertTrue(write_file(vfsStream::url('write.txt'), $content));
+	//
 	// }
 
-	// --------------------------------------------------------------------		
-	
+	// --------------------------------------------------------------------
+
 }
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/form_helper_test.php b/tests/codeigniter/helpers/form_helper_test.php
index 80bace9..1a30ed9 100644
--- a/tests/codeigniter/helpers/form_helper_test.php
+++ b/tests/codeigniter/helpers/form_helper_test.php
@@ -3,26 +3,26 @@
 require BASEPATH . 'core/Common.php';
 require BASEPATH . 'helpers/form_helper.php';
 
-class Form_helper_test extends CI_TestCase 
+class Form_helper_test extends CI_TestCase
 {
 	public function test_form_hidden()
-	{				
+	{
 		$expected = <<<EOH
 
 <input type="hidden" name="username" value="johndoe" />
 
 EOH;
-	
+
 		$this->assertEquals($expected, form_hidden('username', 'johndoe'));
 	}
-	
+
 	public function test_form_input()
 	{
 		$expected = <<<EOH
 <input type="text" name="username" value="johndoe" id="username" maxlength="100" size="50" style="width:50%"  />
 
 EOH;
-	
+
 		$data = array(
 			'name'        => 'username',
 			'id'          => 'username',
@@ -34,37 +34,37 @@
 
 		$this->assertEquals($expected, form_input($data));
 	}
-	
+
 	public function test_form_password()
-	{				
+	{
 		$expected = <<<EOH
 <input type="password" name="password" value=""  />
 
 EOH;
-	
+
 		$this->assertEquals($expected, form_password('password'));
 	}
-	
+
 	public function test_form_upload()
-	{				
+	{
 		$expected = <<<EOH
 <input type="file" name="attachment" value=""  />
 
 EOH;
-	
+
 		$this->assertEquals($expected, form_upload('attachment'));
 	}
-	
+
 	public function test_form_textarea()
-	{				
+	{
 		$expected = <<<EOH
 <textarea name="notes" cols="40" rows="10" >Notes</textarea>
 
 EOH;
-	
+
 		$this->assertEquals($expected, form_textarea('notes', 'Notes'));
 	}
-	
+
 	public function test_form_dropdown()
 	{
 		$expected = <<<EOH
@@ -76,16 +76,16 @@
 </select>
 
 EOH;
-		
+
 		$options = array(
-			'small'  => 'Small Shirt',
-			'med'    => 'Medium Shirt',
-			'large'   => 'Large Shirt',
-			'xlarge' => 'Extra Large Shirt',
+			'small'		=> 'Small Shirt',
+			'med'		=> 'Medium Shirt',
+			'large'		=> 'Large Shirt',
+			'xlarge'	=> 'Extra Large Shirt',
 		);
-		
+
 		$this->assertEquals($expected, form_dropdown('shirts', $options, 'large'));
-		
+
 		$expected = <<<EOH
 <select name="shirts" multiple="multiple">
 <option value="small" selected="selected">Small Shirt</option>
@@ -95,22 +95,22 @@
 </select>
 
 EOH;
-		
+
 		$shirts_on_sale = array('small', 'large');
-		
+
 		$this->assertEquals($expected, form_dropdown('shirts', $options, $shirts_on_sale));
-		
+
 		$options = array(
 			'Swedish Cars' => array(
-				'volvo'  => 'Volvo',
-				'saab'    => 'Saab'
+				'volvo'	=> 'Volvo',
+				'saab'	=> 'Saab'
 			),
 			'German Cars' => array(
-				'mercedes'  => 'Mercedes',
-				'audi'    => 'Audi'
+				'mercedes'	=> 'Mercedes',
+				'audi'		=> 'Audi'
 			)
 		);
-		
+
 		$expected = <<<EOH
 <select name="cars" multiple="multiple">
 <optgroup label="Swedish Cars">
@@ -124,13 +124,10 @@
 </select>
 
 EOH;
-		
-		$cars_on_sale = array('volvo', 'audi');
-		
-		$this->assertEquals($expected, form_dropdown('cars', $options, $cars_on_sale));
-		
+
+		$this->assertEquals($expected, form_dropdown('cars', $options, array('volvo', 'audi')));
 	}
-	
+
 	public function test_form_multiselect()
 	{
 		$expected = <<<EOH
@@ -142,17 +139,17 @@
 </select>
 
 EOH;
-		
+
 		$options = array(
-                  'small'  => 'Small Shirt',
-                  'med'    => 'Medium Shirt',
-                  'large'   => 'Large Shirt',
-                  'xlarge' => 'Extra Large Shirt',
-                );
-		
+			'small'		=> 'Small Shirt',
+			'med'		=> 'Medium Shirt',
+			'large'		=> 'Large Shirt',
+			'xlarge'	=> 'Extra Large Shirt',
+		);
+
 		$this->assertEquals($expected, form_multiselect('shirts[]', $options, array('med', 'large')));
 	}
-	
+
 	public function test_form_fieldset()
 	{
 		$expected = <<<EOH
@@ -160,7 +157,7 @@
 <legend>Address Information</legend>
 
 EOH;
-		
+
 		$this->assertEquals($expected, form_fieldset('Address Information'));
 	}
 
@@ -169,10 +166,10 @@
 		$expected = <<<EOH
 </fieldset></div></div>
 EOH;
-		
+
 		$this->assertEquals($expected, form_fieldset_close('</div></div>'));
 	}
-	
+
 	public function test_form_checkbox()
 	{
 		$expected = <<<EOH
@@ -182,7 +179,7 @@
 
 		$this->assertEquals($expected, form_checkbox('newsletter', 'accept', TRUE));
 	}
-	
+
 	public function test_form_radio()
 	{
 		$expected = <<<EOH
@@ -192,7 +189,7 @@
 
 		$this->assertEquals($expected, form_radio('newsletter', 'accept', TRUE));
 	}
-	
+
 	public function test_form_submit()
 	{
 		$expected = <<<EOH
@@ -202,7 +199,7 @@
 
 		$this->assertEquals($expected, form_submit('mysubmit', 'Submit Post!'));
 	}
-	
+
 	public function test_form_label()
 	{
 		$expected = <<<EOH
@@ -211,7 +208,7 @@
 
 		$this->assertEquals($expected, form_label('What is your Name', 'username'));
 	}
-	
+
 	public function test_form_reset()
 	{
 		$expected = <<<EOH
@@ -221,7 +218,7 @@
 
 		$this->assertEquals($expected, form_reset('myreset', 'Reset'));
 	}
-	
+
 	public function test_form_button()
 	{
 		$expected = <<<EOH
@@ -229,9 +226,9 @@
 
 EOH;
 
-		$this->assertEquals($expected, form_button('name','content'));
+		$this->assertEquals($expected, form_button('name', 'content'));
 	}
-	
+
 	public function test_form_close()
 	{
 		$expected = <<<EOH
@@ -240,13 +237,14 @@
 
 		$this->assertEquals($expected, form_close('</div></div>'));
 	}
-	
+
 	public function test_form_prep()
 	{
-		$expected = "Here is a string containing &quot;quoted&quot; text.";
-		
+		$expected = 'Here is a string containing &quot;quoted&quot; text.';
+
 		$this->assertEquals($expected, form_prep('Here is a string containing "quoted" text.'));
 	}
+
 }
 
 /* End of file form_helper_test.php */
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/html_helper_test.php b/tests/codeigniter/helpers/html_helper_test.php
index 28974b0..9a7bb48 100644
--- a/tests/codeigniter/helpers/html_helper_test.php
+++ b/tests/codeigniter/helpers/html_helper_test.php
@@ -6,16 +6,16 @@
 	{
 		$this->helper('html');
 	}
-	
+
 	// ------------------------------------------------------------------------
-	
+
 	public function test_br()
 	{
 		$this->assertEquals('<br /><br />', br(2));
 	}
-	
+
 	// ------------------------------------------------------------------------
-	
+
 	public function test_heading()
 	{
 		$this->assertEquals('<h1>foobar</h1>', heading('foobar'));
@@ -23,7 +23,7 @@
 	}
 
 	// ------------------------------------------------------------------------
-	
+
 	public function test_Ul()
 	{
 		$expect = <<<EOH
@@ -35,11 +35,9 @@
 EOH;
 
 		$expect = ltrim($expect);
-
 		$list = array('foo', 'bar');
-		
-		$this->assertEquals($expect, ul($list));
 
+		$this->assertEquals(ltrim($expect), ul($list));
 
 		$expect = <<<EOH
 <ul class="test">
@@ -51,13 +49,11 @@
 
 		$expect = ltrim($expect);
 
-		$list = array('foo', 'bar');
-
 		$this->assertEquals($expect, ul($list, 'class="test"'));
 
 		$this->assertEquals($expect, ul($list, array('class' => 'test')));
 	}
-	
+
 	// ------------------------------------------------------------------------
 
 	public function test_NBS()
@@ -66,15 +62,15 @@
 	}
 
 	// ------------------------------------------------------------------------
-	
+
 	public function test_meta()
 	{
 		$this->assertEquals("<meta name=\"test\" content=\"foo\" />\n", meta('test', 'foo'));
-		
+
 		$expect = "<meta name=\"foo\" content=\"\" />\n";
-		
+
 		$this->assertEquals($expect, meta(array('name' => 'foo')));
-		
+
 	}
-	
+
 }
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/inflector_helper_test.php b/tests/codeigniter/helpers/inflector_helper_test.php
index 9e94787..f3b0ebb 100644
--- a/tests/codeigniter/helpers/inflector_helper_test.php
+++ b/tests/codeigniter/helpers/inflector_helper_test.php
@@ -1,12 +1,12 @@
 <?php
 
 class Inflector_helper_test extends CI_TestCase {
-	
+
 	public function set_up()
 	{
 		$this->helper('inflector');
 	}
-	
+
 	public function test_singular()
 	{
 		$strs = array(
@@ -16,15 +16,15 @@
 			'smells'		=> 'smell',
 			'equipment'		=> 'equipment'
 		);
-		
+
 		foreach ($strs as $str => $expect)
 		{
 			$this->assertEquals($expect, singular($str));
 		}
 	}
-	
+
 	// --------------------------------------------------------------------
-	
+
 	public function test_plural()
 	{
 		$strs = array(
@@ -35,15 +35,15 @@
 			'witch'			=> 'witches',
 			'equipment'		=> 'equipment'
 		);
-		
+
 		foreach ($strs as $str => $expect)
 		{
 			$this->assertEquals($expect, plural($str));
-		}		
-	}	
+		}
+	}
 
 	// --------------------------------------------------------------------
-	
+
 	public function test_camelize()
 	{
 		$strs = array(
@@ -52,15 +52,15 @@
 			'i-am-playing-a-trick'	=> 'i-am-playing-a-trick',
 			'what_do_you_think-yo?'	=> 'whatDoYouThink-yo?',
 		);
-		
+
 		foreach ($strs as $str => $expect)
 		{
 			$this->assertEquals($expect, camelize($str));
 		}
-	}	
+	}
 
 	// --------------------------------------------------------------------
-	
+
 	public function test_underscore()
 	{
 		$strs = array(
@@ -69,7 +69,7 @@
 			'i-am-playing-a-trick'	=> 'i-am-playing-a-trick',
 			'what_do_you_think-yo?'	=> 'what_do_you_think-yo?',
 		);
-		
+
 		foreach ($strs as $str => $expect)
 		{
 			$this->assertEquals($expect, underscore($str));
@@ -77,7 +77,7 @@
 	}
 
 	// --------------------------------------------------------------------
-	
+
 	public function test_humanize()
 	{
 		$strs = array(
@@ -86,10 +86,11 @@
 			'i-am-playing-a-trick'	=> 'I-am-playing-a-trick',
 			'what_do_you_think-yo?'	=> 'What Do You Think-yo?',
 		);
-		
+
 		foreach ($strs as $str => $expect)
 		{
 			$this->assertEquals($expect, humanize($str));
 		}
 	}
+
 }
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/number_helper_test.php b/tests/codeigniter/helpers/number_helper_test.php
index 4bb9a91..23d5c5c 100644
--- a/tests/codeigniter/helpers/number_helper_test.php
+++ b/tests/codeigniter/helpers/number_helper_test.php
@@ -1,35 +1,35 @@
 <?php
 
 class Number_helper_test extends CI_TestCase {
-	
+
 	public function set_up()
 	{
 		$this->helper('number');
-		
+
 		// Grab the core lang class
 		$lang_cls = $this->ci_core_class('lang');
-		
+
 		// Mock away load, too much going on in there,
 		// we'll just check for the expected parameter
-		
+
 		$lang = $this->getMock($lang_cls, array('load'));
 		$lang->expects($this->once())
 			 ->method('load')
 			 ->with($this->equalTo('number'));
-		
+
 		// Assign the proper language array
-		
+
 		$lang->language = $this->_get_lang('number');
-		
+
 		// We don't have a controller, so just create
 		// a cheap class to act as our super object.
 		// Make sure it has a lang attribute.
-		
+
 		$obj = new StdClass;
 		$obj->lang = $lang;
 		$this->ci_instance($obj);
 	}
-	
+
 	// Quick helper to actually grab the language
 	// file. Consider moving this to ci_testcase?
 	public function _get_lang($name)
@@ -37,41 +37,40 @@
 		require BASEPATH.'language/english/'.$name.'_lang.php';
 		return $lang;
 	}
-	
+
 	public function test_byte_format()
 	{
 		$this->assertEquals('456 Bytes', byte_format(456));
 	}
-	
+
 	public function test_kb_format()
 	{
 		$this->assertEquals('4.5 KB', byte_format(4567));
 	}
-	
+
 	public function test_kb_format_medium()
 	{
 		$this->assertEquals('44.6 KB', byte_format(45678));
 	}
-	
+
 	public function test_kb_format_large()
 	{
 		$this->assertEquals('446.1 KB', byte_format(456789));
 	}
-	
+
 	public function test_mb_format()
 	{
 		$this->assertEquals('3.3 MB', byte_format(3456789));
 	}
-	
+
 	public function test_gb_format()
 	{
 		$this->assertEquals('1.8 GB', byte_format(1932735283.2));
 	}
-	
+
 	public function test_tb_format()
 	{
 		$this->assertEquals('112,283.3 TB', byte_format(123456789123456789));
 	}
-}
 
-// EOF
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/path_helper_test.php b/tests/codeigniter/helpers/path_helper_test.php
index 632f575..0faf6f3 100644
--- a/tests/codeigniter/helpers/path_helper_test.php
+++ b/tests/codeigniter/helpers/path_helper_test.php
@@ -8,9 +8,8 @@
 	}
 
 	public function test_set_realpath()
-	{				
-		$expected = getcwd() . DIRECTORY_SEPARATOR;
-		$this->assertEquals($expected, set_realpath(getcwd()));		
+	{
+		$this->assertEquals(getcwd().DIRECTORY_SEPARATOR, set_realpath(getcwd()));
 	}
 
 	public function test_set_realpath_nonexistent_directory()
diff --git a/tests/codeigniter/helpers/string_helper_test.php b/tests/codeigniter/helpers/string_helper_test.php
index 29c3d65..75701ec 100644
--- a/tests/codeigniter/helpers/string_helper_test.php
+++ b/tests/codeigniter/helpers/string_helper_test.php
@@ -10,18 +10,18 @@
 	public function test_strip_slashes()
 	{
 		$expected = array(
-			"Is your name O'reilly?", 
+			"Is your name O'reilly?",
 			"No, my name is O'connor."
 		);
-		
+
 		$str = array(
 			"Is your name O\'reilly?",
 			"No, my name is O\'connor."
 		);
-		
+
 		$this->assertEquals($expected, strip_slashes($str));
 	}
-	
+
 	public function test_trim_slashes()
 	{
 		$strs = array(
@@ -144,4 +144,5 @@
 		$this->assertEquals('file-1', increment_string('file', '-', '1'));
 		$this->assertEquals(124, increment_string('123', ''));
 	}
+
 }
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/text_helper_test.php b/tests/codeigniter/helpers/text_helper_test.php
index 73e2b94..f131469 100644
--- a/tests/codeigniter/helpers/text_helper_test.php
+++ b/tests/codeigniter/helpers/text_helper_test.php
@@ -3,16 +3,16 @@
 class Text_helper_test extends CI_TestCase {
 
 	private $_long_string;
-	
+
 	public function set_up()
 	{
 		$this->helper('text');
-		
+
 		$this->_long_string = 'Once upon a time, a framework had no tests.  It sad.  So some nice people began to write tests.  The more time that went on, the happier it became.  Everyone was happy.';
 	}
-	
+
 	// ------------------------------------------------------------------------
-	
+
 	public function test_word_limiter()
 	{
 		$this->assertEquals('Once upon a time,&#8230;', word_limiter($this->_long_string, 4));
@@ -20,8 +20,8 @@
 		$this->assertEquals('', word_limiter('', 4));
 	}
 
-	// ------------------------------------------------------------------------	
-	
+	// ------------------------------------------------------------------------
+
 	public function test_character_limiter()
 	{
 		$this->assertEquals('Once upon a time, a&#8230;', character_limiter($this->_long_string, 20));
@@ -30,22 +30,22 @@
 		$this->assertEquals('Short', character_limiter('Short', 5));
 	}
 
-	// ------------------------------------------------------------------------	
-	
+	// ------------------------------------------------------------------------
+
 	public function test_ascii_to_entities()
 	{
 		$strs = array(
 			'“‘ “test”'			=> '&#8220;&#8216; &#8220;test&#8221;',
 			'†¥¨ˆøåß∂ƒ©˙∆˚¬'	=> '&#8224;&#165;&#168;&#710;&#248;&#229;&#223;&#8706;&#402;&#169;&#729;&#8710;&#730;&#172;'
 		);
-		
+
 		foreach ($strs as $str => $expect)
 		{
 			$this->assertEquals($expect, ascii_to_entities($str));
 		}
 	}
 
-	// ------------------------------------------------------------------------	
+	// ------------------------------------------------------------------------
 
 	public function test_entities_to_ascii()
 	{
@@ -53,27 +53,27 @@
 			'&#8220;&#8216; &#8220;test&#8221;' => '“‘ “test”',
 			'&#8224;&#165;&#168;&#710;&#248;&#229;&#223;&#8706;&#402;&#169;&#729;&#8710;&#730;&#172;' => '†¥¨ˆøåß∂ƒ©˙∆˚¬'
 		);
-		
+
 		foreach ($strs as $str => $expect)
 		{
 			$this->assertEquals($expect, entities_to_ascii($str));
-		}		
+		}
 	}
-	
-	// ------------------------------------------------------------------------	
-	
-	function test_convert_accented_characters() 
+
+	// ------------------------------------------------------------------------
+
+	public function test_convert_accented_characters()
 	{
 		$this->assertEquals('AAAeEEEIIOOEUUUeY', convert_accented_characters('ÀÂÄÈÊËÎÏÔŒÙÛÜŸ'));
 		$this->assertEquals('a e i o u n ue', convert_accented_characters('á é í ó ú ñ ü'));
 	}
 
-	// ------------------------------------------------------------------------	
-	
+	// ------------------------------------------------------------------------
+
 	public function test_censored_words()
 	{
 		$censored = array('boob', 'nerd', 'ass', 'fart');
-		
+
 		$strs = array(
 			'Ted bobbled the ball' 			=> 'Ted bobbled the ball',
 			'Jake is a nerdo'				=> 'Jake is a nerdo',
@@ -81,28 +81,26 @@
 			'Did Mary Fart?'				=> 'Did Mary $*#?',
 			'Jake is really a boob'			=> 'Jake is really a $*#'
 		);
-		
-		
+
 		foreach ($strs as $str => $expect)
 		{
 			$this->assertEquals($expect, word_censor($str, $censored, '$*#'));
 		}
-		
+
 		// test censored words being sent as a string
 		$this->assertEquals('test', word_censor('test', 'test'));
 	}
 
-	// ------------------------------------------------------------------------	
+	// ------------------------------------------------------------------------
 
 	public function test_highlight_code()
 	{
-		$code = '<?php var_dump($this); ?>';
 		$expect = "<code><span style=\"color: #000000\">\n<span style=\"color: #0000BB\">&lt;?php&nbsp;var_dump</span><span style=\"color: #007700\">(</span><span style=\"color: #0000BB\">\$this</span><span style=\"color: #007700\">);&nbsp;</span><span style=\"color: #0000BB\">?&gt;&nbsp;</span>\n</span>\n</code>";
 
-		$this->assertEquals($expect, highlight_code($code));
+		$this->assertEquals($expect, highlight_code('<?php var_dump($this); ?>'));
 	}
 
-	// ------------------------------------------------------------------------	
+	// ------------------------------------------------------------------------
 
 	public function test_highlight_phrase()
 	{
@@ -113,14 +111,14 @@
 			'Or tell me what this is'	=> 'Or tell me what <strong>this is</strong>',
 			''							=> ''
 		);
-		
+
 		foreach ($strs as $str => $expect)
 		{
 			$this->assertEquals($expect, highlight_phrase($str, 'this is'));
 		}
 	}
 
-	// ------------------------------------------------------------------------	
+	// ------------------------------------------------------------------------
 
 	public function test_ellipsize()
 	{
@@ -144,32 +142,30 @@
 				'short'							=> 'short'
 			),
 		);
-		
+
 		foreach ($strs as $pos => $s)
 		{
 			foreach ($s as $str => $expect)
 			{
-				$this->assertEquals($expect, ellipsize($str, 10, $pos));				
+				$this->assertEquals($expect, ellipsize($str, 10, $pos));
 			}
 		}
 	}
 
-	// ------------------------------------------------------------------------	
+	// ------------------------------------------------------------------------
 
 	public function test_word_wrap()
 	{
-		$string = "Here is a simple string of text that will help us demonstrate this function.";
-		$word_wrapped = word_wrap($string, 25);
-		$this->assertEquals(substr_count($word_wrapped, "\n"), 4);
+		$string = 'Here is a simple string of text that will help us demonstrate this function.';
+		$this->assertEquals(substr_count(word_wrap($string, 25), "\n"), 4);
 	}
 
-	// ------------------------------------------------------------------------	
+	// ------------------------------------------------------------------------
 
 	public function test_default_word_wrap_charlim()
 	{
 		$string = "Here is a longer string of text that will help us demonstrate the default charlim of this function.";
-		$word_wrapped = word_wrap($string);
-		$this->assertEquals(strpos($word_wrapped, "\n"), 73);
+		$this->assertEquals(strpos(word_wrap($string), "\n"), 73);
 	}
 
 }
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/url_helper_test.php b/tests/codeigniter/helpers/url_helper_test.php
index c561809..c81c5f1 100644
--- a/tests/codeigniter/helpers/url_helper_test.php
+++ b/tests/codeigniter/helpers/url_helper_test.php
@@ -72,4 +72,5 @@
 			$this->assertEquals($out, auto_link($in, 'url'));
 		}
 	}
+
 }
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/xml_helper_test.php b/tests/codeigniter/helpers/xml_helper_test.php
index a83fef9..e8cf411 100644
--- a/tests/codeigniter/helpers/xml_helper_test.php
+++ b/tests/codeigniter/helpers/xml_helper_test.php
@@ -6,10 +6,10 @@
 	{
 		$this->helper('xml');
 	}
-	
+
 	public function test_xml_convert()
 	{
 		$this->assertEquals('&lt;tag&gt;my &amp; test &#45; &lt;/tag&gt;', xml_convert('<tag>my & test - </tag>'));
 	}
-	
+
 }
\ No newline at end of file
